Many applications such as graphics processing applications include computationally-intensive operations that are typically implemented using integer-based operations and/or floating-point-based operations. For example, many mobile processors, such as those in the Intel® XScale® processor family, are integer-based processors that provide native integer-based operations. Known lower performance graphics applications are often executed on integer-based processors using an integer data type. However, high-performance graphics applications require computations based on numbers having a numeric range that exceeds the range of the integer data type typically used by integer-based processors.
Many computationally-intensive applications, including high-performance graphics applications, require a floating-point data type, which provides a numeric range that exceeds the numeric range typically provided by integer data types. The limited numeric range provided by the integer data types is often overcome by executing floating-point emulation software on integer-based processors.
Executing graphics applications using the integer data type can provide acceptable animation speed, but typically results in reduced picture quality due to the limited numeric range of the integer data type. On the other hand, executing graphics applications using the floating-point data type results in relatively better picture quality, but typically results in slow animation speed due to the processing overhead required to execute the floating-point emulation software.
Handheld platforms such as, for example, handheld platforms based on the Intel® XScale® family of processors usually implement graphics applications using a fixed-point implementation or a floating-point implementation. The fixed-point implementation is based on a fixed-point data type that may be implemented using the integer data type. However, most current graphics applications are designed to use the floating-point data type. As a result, the fixed-point implementation involves rebuilding the software infrastructure of current graphics applications to function with the fixed-point data type.
The fixed-point data type includes a 16-bit integer portion followed by a 16-bit fractional portion and has been implemented in the Intel® Graphics Performance Primitives (GPP) library. Graphics applications using the fixed-point data type use fixed-point operations, which execute at speeds equal to integer operations because the fixed-point data type is implemented based on the integer data type, which is native to most handheld platform processors. Additionally, graphics applications that use the fixed-point data type can provide a relatively high frame-rate on handheld platforms, which results in acceptable performance of computationally-intensive graphics applications such as, for example, gaming applications.
However, the fixed-point implementation often results in high development costs associated with rebuilding software applications that have been designed to work with large dynamic numeric ranges such as the floating-point implementation. In particular, a significant portion of the lower layer software of the graphics applications requires rebuilding to work with the fixed-point and integer data types.
The fixed-point implementation also provides a more limited dynamic numeric range than the floating-point implementation. This limited dynamic numeric range results in a loss of relative precision because of the non-optimal manual scaling of data associated with the fixed-point data type. The relatively low precision associated with the fixed-point data type often results in visual artifacts that are generally perceptible to the typical consumer.
The floating-point implementation for handheld platforms involves executing existing graphics applications or lower-level software such as Direct3D and OpenGL on top of floating-point emulation software, thereby eliminating the need to rebuild the software to use a new data type such as the fixed-point data type. The floating-point implementation usually involves relatively low development costs because many current applications do not need to be rebuilt to use the floating-point data type. Additionally, with the floating-point implementation, the resultant graphics quality is high due to the relatively high dynamic numeric range of the floating-point data type.
Unfortunately, performance of a floating-point implementation based on floating-point emulation software is relatively low. As a result, only less computationally-intensive graphics applications can be executed with acceptable performance using such a floating-point implementation. For example, a floating-point implementation based on floating-point emulation software is too slow for computationally-intensive graphics applications requiring a relatively high frame rate (e.g., gaming applications). Additionally, the power consumption associated with processing floating-point-based operations is relatively high compared to the power consumption associated with integer-based operations.